package com.woniu.repaircenter.service.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniu.exception.XinanException;
import com.woniu.exception.repaircenter.RepairException;
import com.woniu.repaircenter.models.dto.RepairLogDTO;
import com.woniu.repaircenter.models.param.InsertRepairLogParam;
import com.woniu.repaircenter.service.mapper.RepairLogMapper;
import com.woniu.repaircenter.service.model.RepairLog;
import com.woniu.repaircenter.service.service.RepairLogService;
import com.woniu.utils.EnumException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.List;

/**
 * <p>
 * 维修日志表 服务实现类
 * </p>
 *
 * @author 吕雨泽
 * @since 2024年12月06日
 */
@Service
public class RepairLogServiceImpl extends ServiceImpl<RepairLogMapper, RepairLog> implements RepairLogService {

    @Autowired
    private RepairLogMapper repairLogMapper;

    /**
     * 插入维修日志
     * @param insertRepairLogParam 插入维修日志的参数，包含需要记录的维修信息
     * @param userId 执行操作的用户ID，用于记录操作者信息
     * @throws XinanException 如果插入过程中发生异常，则抛出维修日志插入失败的异常
     */
    @Override
    public void insertRepairLog(InsertRepairLogParam insertRepairLogParam, String userId) throws XinanException {
        try {
            // 将插入维修日志的参数转换为维修日志对象
            RepairLog repairLog = BeanUtil.toBean(insertRepairLogParam, RepairLog.class);
            // 设置操作用户ID
            repairLog.setOperUser(userId);
            // 设置当前操作日期时间
            repairLog.setOperDate(formatCurrentDateTime());
            // 调用Mapper方法插入维修日志
            repairLogMapper.insertRepairLog(repairLog);
        } catch (Exception e) {
            // 如果插入过程中发生异常，抛出维修日志插入失败的自定义异常
            throw new RepairException(EnumException.REPAIR_LOG_INSERT_FAILED);
        }
    }


    /**
     * 获取当前日期和时间的格式化字符串
     * @return 当前日期和时间的格式化字符串
     */
    private String formatCurrentDateTime() {
        // 创建一个DateTimeFormatter实例，用于格式化日期和时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 获取当前系统日期和时间，并使用formatter进行格式化，然后返回格式化后的字符串
        return LocalDateTime.now().format(formatter);
    }
}
